home *** CD-ROM | disk | FTP | other *** search
- Hi Marc!
- Here is the source (ASCII). Each file has a line dividing it
- from the rest. The makefile is specific to Visual C++, so I don't know
- if you want to include it - most Windows compilers will have a way
- to generate a makefile or project file, given the source code.
-
- kjg
-
- ---------------- PULSE.C -- (Main entry point) ----------------
- #define GLOBALS TRUE
- #include "pulse.h"
- #undef GLOBALS
-
- int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- MSG msg;
-
- if (!hPrevInstance)
- if (!InitApplication(hInstance))
- return (FALSE);
-
- if (!InitInstance(hInstance, nCmdShow))
- return (FALSE);
-
- while (GetMessage(&msg, NULL, NULL, NULL))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return (msg.wParam);
- }
-
-
- BOOL InitApplication(HINSTANCE hInstance)
- {
- WNDCLASS wc;
-
- wc.style = NULL;
- wc.lpfnWndProc = MainWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = NULL;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = GetStockObject(WHITE_BRUSH);
- wc.lpszMenuName = NULL;
- wc.lpszClassName = "PulseWClass";
-
- return (RegisterClass(&wc));
-
- }
-
- BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
- {
- HWND hWnd;
-
- hWnd = CreateWindow("PulseWClass",
- "Pulse",
- WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- 100,
- 50,
- NULL,
- NULL,
- hInstance,
- NULL);
-
- if (!hWnd)
- return (FALSE);
-
- ShowWindow(hWnd, nCmdShow);
- UpdateWindow(hWnd);
- return (TRUE);
-
- }
-
- ---------------- MAINWND.C -- (Window Procedure) ----------------
- #include "pulse.h"
- /*
- Routine: MainWndProc
- Called By: Windows
- Usage: This is the window procedure for the main window
- */
-
- long FAR PASCAL MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
-
- char szBuffer[BUFMAX+1];
- char szTitle[BUFMAX+1];
- static DWORD dwIn = 0,
- dwOut = 0;
- static DWORD MaxTicks = 0,
- MinTicks = 32767;
- DWORD Ticks;
- HDC hDC;
- HMENU hPulseMenu;
- PAINTSTRUCT ps;
- POINT ptClick;
- RECT rect;
-
- switch (message)
- {
- /*
- read INI file, reset window position to previous, floating over all other, start clock
- */
- case WM_CREATE:
- GetIni();
- SetWindowPos(hWnd, HWND_TOPMOST, nXPos, nYPos, 100, 50, 0);
- SetTimer(hWnd, ID_TIMER, (UINT)1000, NULL);
- break;
- /*
- save the last position (for restoring on restart)
- */
- case WM_MOVE:
- nXPos = LOWORD(lParam);
- nYPos = HIWORD(lParam);
- wsprintf(szBuffer, "%d", nXPos);
- WriteProfileString("Pulse", "XPos", szBuffer);
- wsprintf(szBuffer, "%d", nYPos);
- WriteProfileString("Pulse", "YPos", szBuffer);
- break;
- /*
- all we do on the timer is redraw our contents
- */
- case WM_TIMER:
- InvalidateRect(hWnd, NULL, TRUE);
- break;
- /*
- RMB creates context menu - selection processed in WM_COMMAND
- */
- case WM_RBUTTONDOWN:
- hPulseMenu = CreatePopupMenu();
- InsertMenu(hPulseMenu, 0, MF_BYPOSITION, MI_PULSE, "&Current");
- InsertMenu(hPulseMenu, 1, MF_BYPOSITION, MI_MAXPULSE, "Ma&x Pulse");
- InsertMenu(hPulseMenu, 2, MF_BYPOSITION, MI_MINPULSE, "Mi&n Pulse");
- ptClick = MAKEPOINT(lParam);
- ClientToScreen(hWnd, &ptClick);
- TrackPopupMenu(hPulseMenu, TPM_LEFTALIGN, ptClick.x, ptClick.y, 0, hWnd, NULL);
- InvalidateRect(hWnd, NULL, TRUE);
- DestroyMenu(hPulseMenu);
- break;
-
- case WM_COMMAND:
- Mode = wParam;
- wsprintf(szBuffer, "%d", Mode);
- WriteProfileString("Pulse", "Mode", szBuffer);
- break;
-
- case WM_PAINT:
- dwIn = GetTickCount();
- hDC = BeginPaint(hWnd, &ps);
- GetClientRect(hWnd, &rect);
- if (dwOut)
- {
- SetTextColor(hDC, RGB(0, 0, 255));
- Ticks = dwIn - dwOut;
- switch (Mode)
- {
- case MI_PULSE:
- lstrcpy(szTitle, (LPSTR)"Pulse");
- wsprintf(szBuffer, "%lu Ticks", (DWORD)Ticks);
- break;
-
- case MI_MAXPULSE:
- lstrcpy(szTitle, (LPSTR)"Max Pulse");
- wsprintf(szBuffer, "%lu Ticks", (DWORD)MaxTicks);
- break;
-
- case MI_MINPULSE:
- lstrcpy(szTitle, (LPSTR)"Min Pulse");
- wsprintf(szBuffer, "%lu Ticks", (DWORD)MinTicks);
- break;
- }
- /*
- we draw the text centered in the client area
- */
- GetClientRect(hWnd, &rect);
- DrawText(hDC, szBuffer, -1, &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
- SetWindowText(hWnd, szTitle);
- /*
- reset global counters if necessary
- */
- if (Ticks > MaxTicks)
- MaxTicks = Ticks;
- if (Ticks < MinTicks)
- MinTicks = Ticks;
- }
- EndPaint(hWnd, &ps);
- dwOut = GetTickCount();
- break;
- /*
- pressing the home key emulates clicking the RMB
- */
- case WM_KEYDOWN:
- if (wParam == VK_HOME)
- PostMessage(hWnd, WM_RBUTTONDOWN, (WPARAM)0, MAKELPARAM(0, 0));
- break;
-
- case WM_CLOSE:
- PutIni();
- DestroyWindow(hWnd);
- break;
-
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
-
- default:
- return (DefWindowProc(hWnd, message, wParam, lParam));
- break;
- }
-
- return (NULL);
- }
-
- ---------------- INIFILE.C -- (WIN.INI Processing) --------------
- #include "pulse.h"
- /*
- Routine: GetIni, PutIni
- Called By: various
- Usage: These routines store and fetch initialization info
- */
- void GetIni()
- {
- nXPos = GetProfileInt("Pulse", "XPos", 100);
- nYPos = GetProfileInt("Pulse", "YPos", 100);
- Mode = GetProfileInt("Pulse", "Mode", 100);
- }
-
- void PutIni()
- {
- char szBuffer[20];
-
- /*
- Screen Position
- */
- wsprintf(szBuffer, "%d", nXPos);
- WriteProfileString("Pulse", "XPos", szBuffer);
- wsprintf(szBuffer, "%d", nYPos);
- WriteProfileString("Pulse", "YPos", szBuffer);
- /*
- last active display option
- */
- wsprintf(szBuffer, "%d", Mode);
- WriteProfileString("Pulse", "Mode", szBuffer);
- }
- ---------------- PULSE.H -- (Globals, #defines) ---------------
- #ifndef _PULSE_H
- #define _PULSE_H
- #include <windows.h>
- /*
- logical values, menu items
- */
- #define ID_TIMER 1000
- #define MI_PULSE 100
- #define MI_MAXPULSE 102
- #define MI_MINPULSE 103
- #define BUFMAX 256
- /*
- global variables
- */
- #ifndef GLOBALS
- #define ALLOC extern
- #else
- #define ALLOC
- #endif
- ALLOC int Mode; /* current display mode */
- ALLOC int nXPos, nYPos; /* screen location */
- int PASCAL WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
- BOOL InitApplication(HINSTANCE);
- BOOL InitInstance(HINSTANCE, int);
- long FAR PASCAL MainWndProc(HWND, UINT, WPARAM, LPARAM);
- void GetIni(void);
- void PutIni(void);
- #endif
-
- ---------------- PULSE.DEF -- (Linker definitions) --------------
- NAME Pulse
-
- DESCRIPTION 'Windows Pulse Meter - Kevin Gilhooly'
-
- EXETYPE WINDOWS
-
- STUB 'WINSTUB.EXE'
- CODE PRELOAD MOVEABLE DISCARDABLE
- DATA PRELOAD MOVEABLE MULTIPLE
-
-
- HEAPSIZE 8192
-
- EXPORTS
- MainWndProc @1
-
- ---------------- PULSE.MAK -- (VC++ makefile) -------------------
- # Microsoft Visual C++ generated build script - Do not modify
-
- PROJ = PULSE
- DEBUG = 0
- PROGTYPE = 0
- CALLER =
- ARGS =
- DLLS =
- D_RCDEFINES = /d_DEBUG
- R_RCDEFINES = /dNDEBUG
- ORIGIN = MSVC
- ORIGIN_VER = 1.00
- PROJPATH = C:\KJG\CUJ\PULSE\
- USEMFC = 0
- CC = cl
- CPP = cl
- CXX = cl
- CCREATEPCHFLAG =
- CPPCREATEPCHFLAG =
- CUSEPCHFLAG =
- CPPUSEPCHFLAG =
- FIRSTC = MAINWND.C
- FIRSTCPP =
- RC = rc
- CFLAGS_D_WEXE = /nologo /G2 /W3 /Zi /AM /Od /D "_DEBUG" /FR /GA /Fd"PULSE.PDB"
- CFLAGS_R_WEXE = /nologo /G2 /W3 /AM /O1 /D "NDEBUG" /FR /GA
- LFLAGS_D_WEXE = /NOLOGO /NOD /PACKC:61440 /STACK:10240 /ALIGN:16 /ONERROR:NOEXE /CO
- LFLAGS_R_WEXE = /NOLOGO /NOD /PACKC:61440 /STACK:10240 /ALIGN:16 /ONERROR:NOEXE
- LIBS_D_WEXE = oldnames libw mlibcew commdlg.lib olecli.lib olesvr.lib shell.lib
- LIBS_R_WEXE = oldnames libw mlibcew
- RCFLAGS = /nologo
- RESFLAGS = /nologo
- RUNFLAGS =
- DEFFILE = PULSE.DEF
- OBJS_EXT =
- LIBS_EXT =
- !if "$(DEBUG)" == "1"
- CFLAGS = $(CFLAGS_D_WEXE)
- LFLAGS = $(LFLAGS_D_WEXE)
- LIBS = $(LIBS_D_WEXE)
- MAPFILE = nul
- RCDEFINES = $(D_RCDEFINES)
- !else
- CFLAGS = $(CFLAGS_R_WEXE)
- LFLAGS = $(LFLAGS_R_WEXE)
- LIBS = $(LIBS_R_WEXE)
- MAPFILE = nul
- RCDEFINES = $(R_RCDEFINES)
- !endif
- !if [if exist MSVC.BND del MSVC.BND]
- !endif
- SBRS = MAINWND.SBR \
- PULSE.SBR \
- INIFILE.SBR
-
-
- MAINWND_DEP = c:\kjg\cuj\pulse\pulse.h
-
-
- PULSE_DEP = c:\kjg\cuj\pulse\pulse.h
-
-
- INIFILE_DEP = c:\kjg\cuj\pulse\pulse.h
-
-
- all: $(PROJ).EXE $(PROJ).BSC
-
- MAINWND.OBJ: MAINWND.C $(MAINWND_DEP)
- $(CC) $(CFLAGS) $(CCREATEPCHFLAG) /c MAINWND.C
-
- PULSE.OBJ: PULSE.C $(PULSE_DEP)
- $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c PULSE.C
-
- INIFILE.OBJ: INIFILE.C $(INIFILE_DEP)
- $(CC) $(CFLAGS) $(CUSEPCHFLAG) /c INIFILE.C
-
-
- $(PROJ).EXE:: MAINWND.OBJ PULSE.OBJ INIFILE.OBJ $(OBJS_EXT) $(DEFFILE)
- echo >NUL @<<$(PROJ).CRF
- MAINWND.OBJ +
- PULSE.OBJ +
- INIFILE.OBJ +
- $(OBJS_EXT)
- $(PROJ).EXE
- $(MAPFILE)
- c:\msvc\lib\+
- c:\msvc\mfc\lib\+
- $(LIBS)
- $(DEFFILE);
- <<
- link $(LFLAGS) @$(PROJ).CRF
- $(RC) $(RESFLAGS) $@
-
-
- run: $(PROJ).EXE
- $(PROJ) $(RUNFLAGS)
-
-
- $(PROJ).BSC: $(SBRS)
- bscmake @<<
- /o$@ $(SBRS)
- <<
-
- --- 30 ---
-
-
-
-
-